package handler.wx
/*
	微信公用账号yoka的普通信息处理
*/
import service.UserService
import service.CardService
import service.wx.WxMessager

import util.Utils

import java.text.SimpleDateFormat

// 没有匹配的默认回复
WxMessager.inst.noMatch{Map<String, String> info -> 
	String c = CardService.getHelpContent(info.FromUserName)

	[MsgType: 'text', Content: c]
}

// 关注
WxMessager.inst.add('event', 'subscribe'){Map<String, String> info -> 
	String userName = UserService.createUserIfNotExists(info.FromUserName)

	String helpContent = CardService.getHelpContent(info.FromUserName)

	String inner = userName ? '欢迎回来！' + userName : '欢迎订阅yoka365！'
	String c = """
	${inner}

	${helpContent}
	"""
	[MsgType: 'text', Content: c]
}

// 留言
WxMessager.inst.add('text', /\:.+/){Map<String, String> info -> 
	UserService.leaveMsg(info.FromUserName + ' - ' + info.Content)

	String c = """
		Ok，我们会回复你的！
	"""
	[MsgType: 'text', Content: c]
}

// 个人信息
WxMessager.inst.add('text', /me/){Map<String, String> info -> 
	def item = CardService.getUserStat(info.FromUserName)

	String c = """
		公　　　　司：${item.companyName}
		姓　　　　名：${item.name}
		上次打卡时间：${item.lastSwipeTime}
	"""
	[MsgType: 'text', Content: c]
}

// 查看个人打卡记录
WxMessager.inst.add('text', /list( (\d{4}-\d{1,2}-\d{1,2}|\d+))?/){Map<String, String> info -> 
	def sfDate = new SimpleDateFormat('yyyy-MM-dd')
	def sf = new SimpleDateFormat('yyyy-MM-dd HH:mm:ss')

	String date, dateEnd
	if(info.Content.contains(' ')){
		date = info.Content.split(' ')[1]

		// 只是数字，就查询该数字的天数之前的，比如1，就是昨天
		if(date ==~ /\d+/){
			int diff = Integer.parseInt(date)
			date = sfDate.format(new Date() - diff)
			dateEnd = sfDate.format(new Date() - diff + 1)
		}else{
			def dd = sfDate.parse(date)
			date = sfDate.format(dd)
			dateEnd = sfDate.format(dd + 1)
		}
	}else{
		// 默认当天
		date = sfDate.format(new Date())
		dateEnd = sfDate.format(new Date() + 1)
	}

	log.info('get-record-list - ' + info.FromUserName + ' - ' + date + ' - ' + dateEnd)

	def ll = CardService.getUserRecordList(info.FromUserName, date, dateEnd)
	String c = '没有记录'
	if(ll){
		c = ll.collect{
			it.scanerName + ' - ' + sf.format(it.dd)
		}.join("\r\n")
	}

	[MsgType: 'text', Content: c]
}

// 设置姓名
WxMessager.inst.add('text', /set .+/){Map<String, String> info -> 
	String name = info.Content.split(' ')[1]
	if(name.size() > 20){
		return [MsgType: 'text', Content: '姓名字符数不能超过20，请重新设置']
	}

	UserService.setUserName(info.FromUserName, name)
	[MsgType: 'text', Content: '成功设置姓名：' + name]
}

// 加入公司
WxMessager.inst.add('text', /join \d{1,8}/){Map<String, String> info -> 
	int companyId = info.Content.split(' ')[1] as int

	String companyName = UserService.joinUser(info.FromUserName, companyId)
	String c = companyName ? '成功加入公司：' + companyName : '该公司不存在，请确认ID是否正确'

	[MsgType: 'text', Content: c]
}

// 创建公司
WxMessager.inst.add('text', /create .+/){Map<String, String> info -> 
	String companyName = info.Content.split(' ')[1]
	if(companyName.size() > 50){
		return [MsgType: 'text', Content: '公司名称字符数不能超过50，请重新设置']
	}

	def item = UserService.create(info.FromUserName, companyName)

	if(item.error){
		return [MsgType: 'text', Content: item.error]
	}

	String urlUserScan = CardService.urlUserScan
	String urlUserManage = CardService.urlUserManage

	String c = """
		成功创建公司服务。
		公司　ID　是：${item.companyId}
		管理员密码是：${item.pwd}

		<a href="${urlUserScan}/?openid=${info.FromUserName}">进入打卡页面</a>
		<a href="${urlUserManage}?openid=${info.FromUserName}&companyId=${item.companyId}&pwd=${item.pwd}">管理我的企业打卡信息</a>
	"""
	
	[MsgType: 'text', Content: c]
}

// 菜单event（后面都要修改为oauth）
// 去打卡
WxMessager.inst.add('event', 'toScan'){Map<String, String> info -> 
	String urlUserScan = CardService.urlUserScan

	String c = """
<a href="${urlUserScan}?openid=${info.FromUserName}">进入打卡页面</a>
	"""
	
	[MsgType: 'text', Content: c]
}

// 查看个人刷卡记录
WxMessager.inst.add('event', 'queryScanHistory'){Map<String, String> info -> 
	String urlUserScanQuery = CardService.urlUserScanQuery

	String c = """
<a href="${urlUserScanQuery}?openid=${info.FromUserName}">查询打卡记录</a>
	"""
	
	[MsgType: 'text', Content: c]
}

// 进入企业管理页面，显示二维码页面、进行打卡统计
WxMessager.inst.add('event', /(showScaner|showMeeting|stat)/){Map<String, String> info -> 
	String openid = info.FromUserName
	String eventKey = info.EventKey

	String urlUserManage = CardService.urlUserManage

	def user = UserService.getUserAsManager(openid)

	// TODO 测试用户
	if(!user){
		String testCompanyId = '67'
		String testPwd = '6216f8a75fd5bb3d5f22b6f9958cdede3fc086c2'
		String c = """
您不是管理者账号，不能进行管理！

这个是测试用户ASD，<a href="${urlUserManage}?companyId=${testCompanyId}&pwd=${testPwd}&defaultPage=${eventKey}&1=1">试用</a>
		"""
		return [MsgType: 'text', Content: c]
	}


	// 已经是管理员了
	String label
	if('showScaner' == eventKey)
		label = '显示二维码'
	else if('showMeeting' == eventKey)
		label = '会议列表'
	else if('stat' == eventKey)
		label = '打卡统计'
	else
		label = '管理我的企业打卡信息'

	String c = """
<a href="${urlUserManage}?openid=${openid}&companyId=${user.companyId}&pwd=${user.pwd}&defaultPage=${eventKey}&1=1">${label}</a>
	"""
	
	[MsgType: 'text', Content: c]
}